import request from '@/utils/request'

/**
 * 获取教师所教授的课程列表
 *
 * @param {String} teacherId 教师ID
 * @returns {Promise} 请求Promise
 */
export function getTeacherCourses(teacherId) {
  return request({
    url: `/teacher-course/list/${teacherId}`,
    method: 'get'
  })
}

/**
 * 获取课程详情
 *
 * @param {String} courseId 课程ID
 * @param {Number} classId 班级ID
 * @returns {Promise} 请求Promise
 */
export function getCourseDetail(courseId, classId) {
  return request({
    url: '/teacher-course/detail',
    method: 'get',
    params: { courseId, classId }
  })
}

/**
 * 创建课程
 *
 * @param {Object} courseData 课程数据
 * @returns {Promise} 请求Promise
 */
export function createCourse(courseData) {
  return request({
    url: '/teacher-course/create',
    method: 'post',
    data: courseData
  })
}

/**
 * 更新课程信息
 *
 * @param {String} courseId 课程ID
 * @param {Object} courseData 课程数据
 * @returns {Promise} 请求Promise
 */
export function updateCourse(courseId, courseData) {
  return request({
    url: `/teacher-course/update/${courseId}`,
    method: 'put',
    data: courseData
  })
}

/**
 * 删除课程
 *
 * @param {String} courseId 课程ID
 * @param {Number} classId 班级ID
 * @returns {Promise} 请求Promise
 */
export function deleteCourse(courseId, classId) {
  return request({
    url: '/teacher-course/delete',
    method: 'delete',
    params: { courseId, classId }
  })
}

/**
 * 获取教师信息
 *
 * @param {String} teacherId 教师ID
 * @returns {Promise} 请求Promise
 */
export function getTeacherInfo(teacherId) {
  return request({
    url: `/teacher/${teacherId}`,
    method: 'get'
  })
}

/**
 * 获取班级学生列表
 *
 * @param {Number} classId 班级ID
 * @returns {Promise} 请求Promise
 */
export function getStudentsByClassId(classId) {
  return request({
    url: `/students/class/${classId}`,
    method: 'get'
  })
}

/**
 * 更新教师信息
 *
 * @param {String} teacherId 教师ID
 * @param {Object} data 教师数据
 * @returns {Promise} 请求Promise
 */
export function updateTeacherInfo(teacherId, data) {
  return request({
    url: `/teacher/${teacherId}`,
    method: 'put',
    data
  })
}

/**
 * 获取系统公告
 *
 * @returns {Promise} 请求Promise
 */
export function getSystemAnnouncements() {
  return request({
    url: '/announcement',
    method: 'get'
  })
}

// 课程公告API
/**
 * 获取课程班级的公告列表
 *
 * @param {String} courseId 课程ID
 * @param {Number} classId 班级ID
 * @returns {Promise} 请求Promise
 */
export function getAnnouncementsByCourseAndClass(courseId, classId) {
  return request({
    url: '/course-announcement/list',
    method: 'get',
    params: { courseId, classId }
  })
}

/**
 * 添加课程公告
 *
 * @param {Object} data 公告数据
 * @returns {Promise} 请求Promise
 */
export function addCourseAnnouncement(data) {
  return request({
    url: '/course-announcement',
    method: 'post',
    data
  })
}

/**
 * 更新课程公告
 *
 * @param {Number} announcementId 公告ID
 * @param {Object} data 公告数据
 * @returns {Promise} 请求Promise
 */
export function updateCourseAnnouncement(announcementId, data) {
  return request({
    url: `/course-announcement/${announcementId}`,
    method: 'put',
    data
  })
}

/**
 * 删除课程公告
 *
 * @param {Number} announcementId 公告ID
 * @returns {Promise} 请求Promise
 */
export function deleteCourseAnnouncement(announcementId) {
  return request({
    url: `/course-announcement/${announcementId}`,
    method: 'delete'
  })
}

// 作业管理相关API
/**
 * 获取课程作业列表
 *
 * @param {String} courseId 课程ID
 * @param {Number} classId 班级ID
 * @returns {Promise} 请求Promise
 */
export function getCourseAssignments(courseId, classId) {
  return request({
    url: `/assignments/course/${courseId}/class/${classId}`,
    method: 'get'
  })
}

/**
 * 获取作业详情
 *
 * @param {Number} assignmentId 作业ID
 * @returns {Promise} 请求Promise
 */
export function getAssignmentDetail(assignmentId) {
  return request({
    url: `/assignments/${assignmentId}`,
    method: 'get'
  })
}

/**
 * 添加作业
 *
 * @param {Object} assignment 作业信息
 * @param {Array} studentIds 学生ID列表，可选
 * @returns {Promise} 请求Promise
 */
export function addAssignment(assignment, studentIds) {
  return request({
    url: '/assignments',
    method: 'post',
    data: assignment,
    params: studentIds ? { studentIds } : {}
  })
}

/**
 * 更新作业
 *
 * @param {Number} assignmentId 作业ID
 * @param {Object} assignment 作业信息
 * @returns {Promise} 请求Promise
 */
export function updateAssignment(assignmentId, assignment) {
  return request({
    url: `/assignments/${assignmentId}`,
    method: 'put',
    data: assignment
  })
}

/**
 * 删除作业
 *
 * @param {Number} assignmentId 作业ID
 * @returns {Promise} 请求Promise
 */
export function deleteAssignment(assignmentId) {
  return request({
    url: `/assignments/${assignmentId}`,
    method: 'delete'
  })
}

/**
 * 获取作业提交统计信息
 *
 * @param {Number} assignmentId 作业ID
 * @returns {Promise} 请求Promise
 */
export function getAssignmentStats(assignmentId) {
  return request({
    url: `/assignments/${assignmentId}/stats`,
    method: 'get'
  })
}

/**
 * 获取作业提交列表
 *
 * @param {Number} assignmentId 作业ID
 * @returns {Promise} 请求Promise
 */
export function getSubmissionsByAssignmentId(assignmentId) {
  return request({
    url: `/submissions/assignment/${assignmentId}`,
    method: 'get'
  })
}

/**
 * 批改作业
 *
 * @param {Number} submissionId 提交记录ID
 * @param {Number} score 分数
 * @param {String} feedback 反馈意见
 * @param {String} teacherId 教师ID
 * @returns {Promise} 请求Promise
 */
export function gradeSubmission(submissionId, score, feedback, teacherId) {
  return request({
    url: `/submissions/${submissionId}/grade`,
    method: 'put',
    params: {
      score,
      feedback,
      teacherId
    }
  })
}

/**
 * 上传教师头像
 * 
 * @param {File} file 头像文件
 * @returns {Promise} 请求Promise
 */
export function uploadTeacherAvatar(file) {
  const formData = new FormData()
  formData.append('file', file)
  
  return request({
    url: '/oss/upload',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 上传作业资源文件
 *
 * @param {File} file 文件对象
 * @returns {Promise} 请求Promise
 */
export function uploadAssignmentResource(file) {
  const formData = new FormData()
  formData.append('file', file)
  
  return request({
    url: '/oss/upload',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  }).then(res => {
    // 添加额外验证，确保返回的是URL而不是成功消息
    if (res.code === 200 && res.data) {
      if (typeof res.data === 'string') {
        if (res.data.startsWith('http') && res.data.includes('/')) {
          // 这是有效的URL，直接返回
          return res;
        } else {
          // 这是一个错误的返回值，服务器没有返回真实URL
          console.error('服务器返回了无效的URL:', res.data);
          throw new Error('服务器返回了无效的URL，请联系管理员检查OSS配置');
        }
      } else {
        console.error('服务器返回了非字符串类型的数据:', res.data);
        throw new Error('服务器返回了无效的数据类型，请联系管理员');
      }
    } else if (res.code !== 200) {
      throw new Error(res.message || '文件上传失败');
    } else {
      console.error('服务器返回了空数据');
      throw new Error('文件上传失败，服务器返回了空数据');
    }
  });
}

/**
 * 下载学生提交文件
 *
 * @param {String} fileUrl 文件URL
 * @returns {Promise} 请求Promise
 */
export function downloadSubmissionFile(fileUrl) {
  return request({
    url: fileUrl,
    method: 'get',
    responseType: 'blob'
  })
}

/**
 * 获取学生详情
 *
 * @param {String} studentId 学生ID
 * @returns {Promise} 请求Promise
 */
export function getStudentById(studentId) {
  return request({
    url: `/students/${studentId}`,
    method: 'get'
  })
} 